Trucker Terminal System

- et adgangs kontrol system

 

 

Design

 

 

 

 

 

Udarbejdet af:            Gruppe 7 (I2)

 

            Medlemmer:              Alex Hede                              01065

                                                Jeppe Hasager                     01048

                                                Jesper Johansen                  02877

                                                Søren S Munk                        02847

                                               

            Vejleder:                     Michael E. Kristensen

 


Indholdsfortegnelse

1      Projektdesign. 23

2      Kommunikationsdel 24

2.1        Programdesign. 24

2.1.1         Eksterne grænseflader 24

2.1.2         Processer 25

2.1.3         Kontrol på programdesign. 25

2.2        Procesdesign. 29

2.2.1         Programmets opdeling. 33

2.2.2         Worst case diagram.. 37

2.2.3         Forventet forløb. 39

2.3        Moduldesign. 40

2.3.1         Kommunikationsmodulet 41

2.3.2         HDLC-klassen. 44

3      Databasedel 48

3.1        Database design. 48

3.2        Program design. 50

3.2.1         Eksterne grænseflader 50

3.2.2         Processer 51

3.2.3         Grænseflader mellem processerne. 53

3.2.4         Kontrol på programdesign. 54

3.3        Procesdesign. 56

3.3.1         Designmetode. 56

3.3.2         Processernes eksterne grænseflader 56

3.3.3         Opdeling i moduler 57

3.4        Moduldesign. 61

3.4.1         Modulernes eksterne grænseflader: 61

3.4.2         Modulspecifikationer 62

 


1                    Projektdesign

Projektet er opdelt i to dele, en databasedel og en kommunikationsdel, begge med en tilhørende applikation. Diagrammet nedenfor viser opdelingen af projektet, med tilhørende eksterne grænseflader. De grå kasser viser henholdsvis kommunikationsdel og databasedel. De hvide kasser illustrerer eksisterende terminal og ODBC driver. Terminalen leveres af kunden og som ODBC driver anvendes Windows ODBC applikation.

Grænsefladerne er vist nedenfor som interfaces 1-4. Kommunikationsdelen har interface 1 til terminalen og interface 2 til ODBC driver. Databasedelen har interface 3 til ODBC driver. Database applikationen har interface 4 til ODBC driver.

Diagram 1 Overordnet grænsefladebeskrivelse.

Af: Alex Hede, Jeppe Hasager, Søren S. Munk


2                    Kommunikationsdel

2.1                  Programdesign

Kommunikationsdelen skal varetage kommunikationen mellem terminal og PC.

Der skal tjekkes om der er indlæst kort, og at pinkode og kortnummer stemmer overens. Hvis de stemmer overens gives adgang og grøn lampe tændes, ellers tændes rød lampe og der gives nyt forsøg. Hvis pinkode indtastes forkert 3 gange spærres kort. Desuden udskrives vejledende tekst under forløbet i det alfanumeriske display.

2.1.1                  Eksterne grænseflader

Kommunikationsdelen har, som det ses på diagram 1, to eksterne grænseflader. Den ene grænseflade (interface 1), mellem kommunikationsdelen og terminalen, er specificeret ved den HDLC lignende protokol.

 

I HDLC protokollens informationsramme (i-ramme), er der et id-felt, som kan antage følgende værdier A, B, C, D, E, F og G. Vi anvender A, B, C og D, hvor A og B kommer fra terminalen og C og D sendes af os til terminalen.

 

ID:

 

Informationsindhold

A

Kortlæser

Kortnummer

B

Tastatur

PIN-kode og funktionstast

C

Numerisk display

Tal der skal vises

D

Alfanumerisk display

Informationstekst til brugeren

Tabel 1 Id’ets betydning

Den anden grænseflade (interface 2) er mellem ODBC driveren og kommunikationsdelen. Kommunikationen herimellem er specificeret ved SQL (structured query language), men bliver håndteret af databasedelen, da interface 2 og interface 4 er ens.


2.1.2                  Processer

Kommunikationsapplikationens processer er angivet herunder:

 

2.1.3                  Kontrol på programdesign

Som kontrol på programdesignet opstilles følgende tabel. I tabellen er de enkelte krav i kravspecifikationens afsnit om specifikke krav, som henvender sig til kommunikationsapplikationen, opstillet mod de processer, som opfylder netop de krav.

Krav nr:

 

3.2.1.1

 

3.2.1.2

Kravtekst

Alt udover de 4 første cifre ignoreres ved indtastning.

Når kortet læses korrekt, skal processen fuldføres eller afbrydes, før en ny proces kan starte.

Opfyldes af proces:

Hent pinkode

Main

 


 

Krav nr:

 

3.2.1.3

 

3.2.1.4

Kravtekst

Systemet går i udgangstilstand, hvis der går 15 sekunder fra kortindlæsning til afslutning af pinkode.

Systemet går i spærret tilstand i 5 sekunder hvis kortet er spærret, hvorefter det går i udgangstilstand.

Opfyldes af proces:

Main

Spærret tilstand

 

 

 


Krav nr:

 

3.2.1.5

 

3.2.1.6

Kravtekst

Systemet går i udgangstilstand hvis kortnummer er ukendt.

Punktet er fjernet.

Opfyldes af proces:

Tjek kortnr.

 

 

 

 

Krav nr:

 

3.2.1.7

 

3.2.1.8

Kravtekst

Ved 3 forkerte indtastninger af pinkode spærres kortet.

Efter korrekt indtastning af pinkode, har man igen 3 forsøg.

Opfyldes af proces:

Nægt adgang

Giv adgang

 

 

 

Krav nr:

 

3.2.3.1

 

3.2.3.2

Kravtekst

Før indlæsning af kortet, vises teksten: ”Klar. Indlæs kort”.

Går der mere end 15 sekunder fra kortindlæsning til afslutning af pinkode går applikationen i udgangstilstand, med tilhørende displaytekst: ” Klar. Indlæs kort”.

Opfyldes af proces:

Hent kortnr.

Skriv til alfa. display

Main

Skriv til alfa. display


 

Krav nr:

 

3.2.3.3

 

3.2.3.4

Kravtekst

Efter indlæsning af kort vises teksten: ”Indtast pinkode”.

Hvis kortet er spærret vises teksten: ”Kortet er spærret” i 5 sekunder hvorefter teksten ”Klar. Indlæs kort” vises.

Opfyldes af proces:

Hent pinkode

Skriv til alfa. display

Tjek kortnr.

Skriv til alfa. display

 

Krav nr:

 

3.2.3.5

 

3.2.3.6

Kravtekst

Hvis kortnummeret er ukendt vises teksten: ”Kortet er ukendt”.

Efter indtastning af rigtig pinkode vises teksten: ”Godkendt”.

Opfyldes af proces:

Tjek kortnr.

Skriv til alfa. display

Giv adgang

Skriv til alfa. display

 

Krav nr:

 

3.2.3.7

 

3.2.3.8

Kravtekst

Efter indtastning af forkert pinkode vises teksten: ”Pinkoden er forkert. Prøv igen”.

Efter den 3. mislykkede indtastning vises teksten:” Forkert pinkode, kortet er spærret” i 5 sekunder hvorefter teksten ”Klar. Indlæs kort” vises.

Opfyldes af proces:

Nægt adgang

Nægt adgang

Skriv til alfa. display

 

Krav nr:

 

3.2.4.1

 

3.2.4.2

Kravtekst

Punktet er fjernet.

Funktionstasten A sletter det sidst indtastede ciffer.

Opfyldes af proces:

 

Hent pinkode

 


 

Krav nr:

 

3.2.4.3

 

3.2.4.4

Kravtekst

Funktionstasten C sletter den indtastede pinkode.

Funktionstasten E accepter den indtastede pinkode.

Opfyldes af proces:

Hent pinkode

Hent pinkode

 

Krav nr:

 

3.2.4.5

 

3.2.5.1

Kravtekst

Alle uspecificerede funktionstaster fungerer som ’C’.

Punktet er fjernet.

Opfyldes af proces:

Hent pinkode

 

 

Krav nr:

 

3.2.5.2

 

3.2.6.1

Kravtekst

Der vil være nedtælling fra 15 sekunder til 0, mens man har mulighed for at indtaste pinkode.

Rød lyser ved spærret kort.

Opfyldes af proces:

Main

Skriv til num.display

Tænd lampe

Spærret tilstand

 

Krav nr:

 

3.2.6.2

 

3.2.6.3

Kravtekst

Rød lyser ved ukendt kort.

Rød lyser hvis pinkoden er forkert indtastet 3 gange.

Opfyldes af proces:

Tænd lampe

Tænd lampe

Nægt adgang

 

Krav nr:

 

3.2.6.4

 

Kravtekst

Grøn lyser når pinkoden er accepteret.

Opfyldes af proces:

Tænd lampe

Giv adgang

 

Af: Alex Hede, Jeppe Hasager, Søren S. Munk


2.2                  Procesdesign

Kommunikationsapplikationen er ovenfor blevet opdelt i processer.

Processerne og deres grænseflader bliver beskrevet nærmere nedenfor.

Diagram 2 Grænseflader mellem processer

Diagrammet viser hvilke processer der kommunikerer med hinanden. Enkeltpile illustrerer at funktionen ikke returnerer et svar. Dobbeltpile illustrerer at funktionen returnerer et svar.

Main funktionen kommunikerer med de grå hovedprocesser. Hovedprocesserne kommunikerer med de underliggende processer som hver løser deres opgave. Det er kun de vigtigste underliggende processer, der er illustreret herover, for at gøre diagrammet mere overskueligt. Samtlige processer er illustreret i diagram 3 herunder.


Diagram 3 Kommunikation mellem de enkelte processer (beskrivelse efter tabel) se bilag 4

 

NR

INPUT

OUTPUT

1

Tekst,                længde

 

2

Fortegn,            Tal,                længde

 

3

Kortnummer

Status

4

Antal sekunder

 

5

Kortnummer

Status

6

Kortnummer,    Read/write

Blokeret status

7

Lampenummer

 

8

Pin-kode

Status

9

Kortnummer,    Pin-kode

Gyldig

10

 

Status

11

Kortnummer     Antal

 

12

 

Status

13

Kortnummer

Antal

Tabel 2 parametertabel

 

I diagram 3 herover illustreres sammenhængen mellem modulerne. Niveauet under main kaldes hovedfunktioner, der alle kaldes af main fra venstre mod højre. Niveauerne under hovedfunktionerne kaldes underfunktioner. Under hver hovedfunktion ses hvilke underfunktioner den kan bruge. Funktioner der har et nummer tager enten parametre og/eller returnerer en værdi. Tallene i Diagram 3 refererer til parametertabellen, der er vist i tabel 1. Tabellen beskriver hvilke input og output de nummererede funktioner har.

 

Samtlige funktioner der kommunikerer med terminalen, kalder setTerminalStatus() fra databasedelen, for at opdatere dens status.


2.2.1                  Programmets opdeling

Herunder ses en overordnet opdeling af kommunikationsdelen i mindre processer.

Diagram 4 Kommunikationsdelen opdelt i mindre processer

Nedenfor beskrives hvilket formål hver proces, der ses i Diagram 4, har.


2.2.1.1                 Opret DB objekt:

Før en proces kan gennemføres, skal der være oprettet et objekt, der giver adgang til databasen. Dette objekt giver ligeledes mulighed for at validere pin-kode og kortnummer, og spærring af kort. Dette objekt laves af databasedelen.

 

2.2.1.2                 Udgangstilstand:

void udgangstilstand() kaldes

Funktionen nulstiller det alfanumeriske og det numeriske display. Rød og grøn lampe slukkes.

 

2.2.1.3                 Kort indlæst:

bool getKortnr(&int) kaldes.

Funktionen viser teksten ”Klar. Indlæs kort” ved anvendelse af funktionen (void setAlfadisp (char [] linie1)).

Terminalen polles for at finde ud af om der er indlæst kort. Hvis ID er A, som betyder at der er registreret et kortnummer, gemmes kortnummeret på den adresse som funktionen har modtaget som parameter. Processen kan derefter fortsætte. Ellers polles der igen indtil der indlæses et kort.

Hvis der er indlæst kort returneres true. Ellers returneres false.

 


2.2.1.4                 Tjek kortnummer:

(bool tjekKortnr() )

Funktionen kontrollerer først kortnummerformatet som skal være på 4 cifre. Hvis formatet ikke er OK vises teksten ”Kortet er ukendt”, og der returneres false. Hvis formatet er OK, kontrollerer funktionen om kortet er spærret ved at se i databasen. Hvis kortet er spærret, vises teksten ”Kortet er spærret” og funktionen void kortSpaerret() kaldes. Denne funktion tænder den røde lampe og går efter et stykke tid tilbage til udgangstilstand. Der returneres false. Hvis kortnummeret er OK returneres true.

 

2.2.1.5                 Hent pinkode

(bool getPinkode(&int) )

Funktionen kaldes efter at funktionen tjek kortnummer har returneret true.

Funktionen aflæser pinkoden ud fra informationsfeltet i HDLC protokollens i-ramme, når id-feltet antager værdien B. Er pinkoden indtastet efterfulgt af funktionstasten E returneres true.

Hvis der er trykket på funktionstasten B, C, D eller F kan der indtastes en pinkode på ny, hvis der ikke er trykket på en funktionstast inden 15 sekunder returneres false. Hvis der trykkes på funktionstasten A returneres false.

Når der returneres false går applikationen i udgangstilstand.

Tiden udmåles fra funktionen kaldes.

 

2.2.1.6                 Valider pinkode og kortnummer

(bool validerPinkode (int kortNummer, int pinkode))

Funktionen implementeres af databasedelen.

Funktionen returnerer true eller false, og har kortnummer og pin-kode som parametre. Funktionen returnerer true når den indtastede pin-kode stemmer overens med den i databasen gemte pin-kode.

 

2.2.1.7                 Giv adgang

(bool givAdgang() )

Funktionen kaldes når valider pinkode og kortnummer returnerer true.

Funktionen udskriver ”Godkendt” til det alfanumeriske display, og returnerer det samme som setAntalForsøg i databasedelen. I begge tilfælde gives adgang.

Funktionen kalder tænd lampe.

 

2.2.1.8                 Grøn lampe lyser i ca. 5 sekunder

(void taendLampe(int) )

Funktionen kaldes med 0 1 for tænd grøn lampe. Der returneres til udgangstilstand.

 

 

 

 


2.2.2                  Worst case diagram

Nedenstående figur viser en oversigt over steder i applikationen, hvor der kan opstå kritiske fejl. Ved kritiske fejl menes ydre omstændigheder, som applikationen ikke selv er i stand til at løse. Dette betyder ikke at applikationen afsluttes, men den går i udgangstilstand. Applikationen forbliver i denne tilstand indtil fejlen er rettet. Fejltyperne er beskrevet nedenfor diagrammet.

 

Diagram 5 Worst case diagram, med fejlnumre

 

 

Fejltyper I Diagram 5:

 

Fejl 1:        ! DB connect:                   ODBC servicen kan ikke oprette

                                    forbindelse til databasen.

Som eksempel kan nævnes at databasen ikke er oprettet.

 

Fejl 2:        ! Terminal connect:         Applikationen kan ikke oprette forbindelse til

terminalen.

Som eksempel kan nævnes strømsvigt eller at kablet ikke er korrekt forbundet.

 

Fejl 3:        Applikationen lukkes      Applikationen lukkes/afsluttes.

Som eksempel kan nævnes at en bruger trykker ctrl+C, dette kan ske i alle funktioner.

 


2.2.3                  Forventet forløb

Nedenstående diagram viser de processer der gennemføres ved et korrekt forløb, hvor kort og pinkode accepteres første gang og der gives adgang. 

Diagram 6 beskriver det forventede forløb

Forbindelse til databasen bliver oprettet.

Applikationen går i udgangstilstand.

Et kort indlæses.

Kortnummerformatet er OK, og kortnummeret er ikke spærret.

En pinkode indtastes.

Pinkode og kortnummer stemmer overens.

Der gives adgang og grøn lampe tændes.

Applikationen går tilbage i udgangstilstand.

Af: Alex Hede, Jeppe Hasager, Søren S. Munk

2.3                  Moduldesign

Kommunikationsdelen er inddelt i to moduler, kommunikations- og HDLC-modul.

HDLC modulet indeholder HDLC klassen, der implementerer HDLC protokollen, og den bruger ComClass klassen til at tilgå den serielle port. ComClass giver mulighed for at sende og modtage data fra en seriel port via 2 funktioner send() og receive() samt se hvor meget data der er i modtager bufferen, inWaitingBuffer().

Kommunikationsmodulet, i diagram 5 kaldet Komm, anvender HDLC-modulet til at overføre data mellem terminal og pc og DB_Com til at kommunikere med databasen.

 

Diagram 7 Modulernes eksterne grænseflader

 

Diagrammet viser modulerne som indgår i kommunikationsdelen og hvordan de inbyrdes kommunikerer. DB_Com er en klasse der bliver stillet til rådighed fra databasedelen. Kommunikations og HDLC modulet beskrives herunder.

 


2.3.1                  Kommunikationsmodulet

Parenteser angiver C++-prototyper. Derefter følger en beskrivelse af parametre og returværdier, og en yderligere beskrivelse af funktionernes virkemåde.

 

Diagram 8 UML diagram over Komm klassen

 

Hent pinkode (bool getPinkode(&int))

”Indtast pinkode”

Hent de fire første cifre af pinkoden

Returner true hvis der kan hentes en pinkode og der er trykket på funktionstasten E, hvis der er trykket på funktionstasten B, C, D og F kan der indtastes en pinkode på ny.

Hvis der ikke er trykket på en funktionstast efter 15 sekunder returneres false.

Hvis der trykkes på funktionstasten A returneres false.

 

Giv adgang (bool givAdgang())

”Godkendt”

Tænd grøn lampe

Nulstil antal forkerte indtastninger af pinkode

Kort pause, vent 5 sekunder

 

Spærret tilstand (void spaerrettilstand())

Rød lampe tændes

Vent 5 sekunder

 

Hent kortnr. (bool getKortnr(&int))

”Klar. Indlæs kort”

Hent kortnummer

Hvis kort indlæst returner true

Ellers returneres false

 

Tjek kortnr. (bool tjekKortnr(int kortnummer))

Hvis kortnummer formatet ikke OK ”Kortet er ukendt”, returner false

Hvis kortet er spærret, ”Kortet er spærret” gå i spærret tilstand, returner false

Ellers returneres true

 

Nægt adgang (bool naegtAdgang())

”Pinkoden er forkert. Prøv igen”

Antal forsøg tælles 1 op

Hvis antal forsøg >= 3 spærres kort

”Forkert pinkode, kortet er spærret”

Gå i spærret tilstand.

 

Udgangstilstand (void udgangstilstand())

Nulstil terminal                       //nulstil display, tøm buffer

Sluk rød lampe

Sluk grøn lampe

 

Tænd lampe (void taendLampe(int))

Tænd for en given lampe

 

Sluk Lampe (void slukLampe(int))

Sluk for en given lampe

 

Skriv til numerisk display (void setNumdisp (char sign, char  *tal))

Udskriver til det numeriske display

 

Skriv til alfanumerisk display (void setAlfadisp (char [] linie2, int length))

Udskriver til det alfanumeriske display i linie 2

 

Opdater tid (void opdaterTid())

Udskriver dato og klokkeslæt til alfanumerisk display i linie 1.

 

 Vent (void vent(int tid))

Venter et givet antal millisekunder.

 


2.3.2                  HDLC-klassen

Kommunikationen mellem PC og terminal sker ved den HDLC lignende protokol. De funktioner der anvendes i HDLC-klassen er beskrevet herunder med parametre og returværdier, og en yderligere beskrivelse af funktionernes virkemåde.

 

Diagram 9 UML diagram for HDLC klassen

 

Send en pakke (void send())

Kalder setNs og setNr og lægger CHK ind i pakken. I pakken indsættes DLE og STX tegn på plads 0 og 1 og derefter laves bytestuffing. Pakken sendes derefter via klassen serialCom::send.

           

Modtag en pakke (bool receive())

Funktionen ser efter start bytene DLE og STX. Der fjernes eventuelle bytestuffede DLE’er. Returnerer true når en pakke er korrekt modtaget og returnerer false når der er fejl i CHK eller time out.   

 

Indsæt information (bool setInfo(char *data, int infoLength))

Hvis I-ramme, så indsættes informationen på den 6. plads (byte)  i pakken, og returnerer true.

Ellers returneres false

 

Hent information (char* getInfo(int *length))

Henter indholdet af informationsfeltet fra pakken.

 

Indsæt længde (bool setLEN(int length))

Indlæser længden af I-rammen og returnerer true, hvis S-rammereturneres false.

 

Hent længde (int getInfoLength())

Henter længden af informationsfeltet fra LEN på plads nummer 4. Returnerer LEN –7. Header og checksum fylder tilsammen 7 byte.

           

Indsæt id (void setId(char id))

Sætter I-rammens 5. plads lig med id.

           

Hent id (char getId())

Returnerer pakkens id.

           

Indsæt type (void setType(int rammetype))

Sætter rammetypen til I-ramme eller S-ramme. Hvis S-ramme oprettes nyt pakke array.

           

Hent type (char getType())

Henter rammetype. Tjekkes ved at bruge AND operator på KON feltets mindst betydende bit for at se hvilken type ramme der er tale om og returnerer denne.

           

Indsæt adresse (void setAdr(char adresse))

Indsætter adressen fra rammens plads nr. 2        

 

Hent adresse (char getAdr())

Returnerer adressen fra rammens plads nr. 2

 

Boot terminal (bool setBoot(bool value))

Indsætter boot lig 1 1 hvis value er true. Returnerer true hvis det er en S-ramme og der er indhold i pakken. Ellers returneres false.

 

 

Klar til modtagelse (bool getReady())

Returnerer true når S-rammens KON byte indeholder 0 på bit 1 og 2, så er der gjort klar til modtagelse af en ny ramme ellers returneres false.

 

Indsæt nummer på I-ramme (void setNS(int value))

Indsætter nummeret på den afsendte I-ramme.

 

Hent nummer på I-ramme (int getNS())

Returnerer nummeret på den afsendte I-ramme

 

Indsæt nummer på næste I-ramme (void setNR(int value))

Indsætter nummeret på næste I-ramme.

 

Hent nummer på næste I-ramme (int getNR())

Returnerer nummer på næste I-ramme.

 

Indsæt flag til styring af hvornår der må sendes (void setPF(int value))

Indsætter flag til styring af afsendelse af rammer. Når pc’ens PF sættes til 1 må terminalen svare. Når terminalens PF sættes til 1 har den ikke mere at sende.

 

Hent flag til styring af hvornår der må sendes (bool getPF())

Henter flag til styring af hvornår der må sendes rammer mellem pc’en og terminalen. Returnerer true når flag er sat og der må sendes pakke.

 

Hent checksum (char getCHK())

Henter checksum der beregnes som en XOR-sum af alle bytes, med undtagelse af indsatte DLE’er fra bytestuffing.

 

Time out (bool receiveOneCharTimeout(char *value))

Når bufferen ikke er tom hentes karakteren og kopieres over i parameteren value. Funktionen returnerer true når dette er sket og returnere false der er time out.

Af: Alex Hede, Jeppe Hasager, Søren S. Munk

 


3                    Databasedel

Databaseapplikationen bruger en database, som indeholder de data der knytter sig til de enkelte brugere. Databasen benyttes tillige af kommunikationsdelen, som slår op i databasen for at hente værdier og skriver til databasen.

 

3.1                  Database design

Databasen knyttes til applikationen med en ODBC, som således bliver databasens grænseflade til selve applikationen.

 

Diagram 10 Databasens eksterne grænseflader

De data, som databasen indeholder, er:

 

Brugernavn:            navn på bruger.

Kundenummer:       Et nummer, som er unikt for hver bruger tildeles som et løbenummer.

Kortnummer:           Et nummer, som er unikt for hver kort.

Pinkode:                  En kode (nummer), som tildeles hvert kort.

Kort_Spærret:        En boolean, som angiver om et givet kort er spærret – true eller åbent – false.

Antal_Forsøg:         Et nummer, som angiver hvor mange forkerte indtastnings forsøg af pinkode der er foretaget på et givet kort.

Terminalnummer:   Et nummer, som er unikt for hver terminal, som er knyttet til systemet.

Status:                     Et nummer, som angiver en given terminals status.

 

Da hver bruger godt kan have flere kort knyttet til sig placeres Kundenummer og brugernavn i en tabel, Kundenummer, kortnummer, pinkode, kort_spærret og antal_forsøg i en tabel og endelig terminalnummer og status i en tabel.

 

Der bliver hermed følgende inddeling af tabeller:

 

Tabel_Kortdata:

Kundenummer

Kortnummer

Pinkode

Kort_spærret

Antal_forsøg

 

Tabel_Brugerdata:

Kundenummer

Brugernavn

 

Tabel_Terminaldata:

Terminalnummer

Status

 

Tabellerne Tabel_Kortdata og Tabel_Brugerdata knyttes sammen med datanavnet Kundenummer.


Databasen får dermed følgende struktur:

Diagram 11 Databasens struktur

Al håndtering af databasen sker fra databaseapplikationen, og databasen indeholder dermed kun de ovennævnte tabeller.

Af: Jesper Johansen

 

3.2                  Program design

3.2.1                  Eksterne grænseflader

Programmets eksterne grænseflader består af:

 

Programmets eksterne grænseflader er illustreret på Diagram 12.

Diagram 12 Programmets eksterne grænseflader

 

3.2.2                  Processer

Databaseapplikationens processer er angiver herunder:

 

I det følgende er processerne beskrevet i detalje:

 

Tilgå Database.

Processen opretter og afbryder forbindelse til den anvendte database.

 

Opret bruger

Processen opretter en ny bruger i databasen udfra modtagne parametre.

Processen opretter en bruger med navn hvis brugeren ikke allerede er oprettet. Derefter tildeler den brugeren:

 

Processen tjekker, at kortnummer ikke overstiger 4 cifre og at pinkoden ikke overstiger 4 cifre.

 

Rediger Bruger

 

Slet Bruger

 

Søg

 

Servicer Kommunikation Applikation (Service Kom. App.)

Processen servicerer Kommunikations applikationen, således at den kan hente data fra og skrive til databasen. Processen:

 

Terminalstatus.

Processen:

 

3.2.3                  Grænseflader mellem processerne

Grænsefladerne er illustreret på følgende figur:

Processerne kommunikerer således, at hver proces skriver til eller læser fra databasen via Tilgå database, som har oprettet forbindelse til ODBC’en. Hver af processerne Opret bruger, Rediger bruger, Slet bruger, Spær kort anvender processen Søg, og der er derfor kommunikation mellem disse processer. Der er ingen kommunikation mellem følgende processer: Opret bruger, Rediger bruger, Slet bruger og Spær Kort, da de alle ligger på samme niveau.

Dette illustreres på følgende figur:

 

 

Diagram 13 Kommunikation mellem de enkelte processer

 

3.2.4                  Kontrol på programdesign

Som kontrol på programdesignet opstilles følgende tabel. I tabellen er de enkelte krav i krav-specifikationens afsnit om specifikke krav, som henvender sig til databaseapplikationen, opstillet mod de processer, som opfylder netop de krav.

 

Krav nr:

 

3.2.2.1

 

3.2.2.2

Kravtekst

 

Applikationen bruger en database til opbevaring af brugerprofiler.

 

Applikationen skal kunne indeholde minimum 100 brugere.

Opfyldes af proces:

 

Samtlige processer anvender databasen. Der er ikke en egentlig proces, som opretter databasen. Dette gøres manuelt

 

Der anvendes en database, som kan indeholder mere end 100 brugere.

 

 

 

Krav nr:

 

3.2.2.3

 

3.2.2.4

Kravtekst

 

I applikationen skal man kunne oprette en ny brugerprofil.

 

Applikationen skal kunne søge i listen over brugere, udfra navn eller kundenummer.

Opfyldes af proces:

Tilgå Database

Opret Bruger

Søg

 

Tilgå Database

Opret Bruger

Rediger Bruger

Slet Bruger

Søg

Service Kom. App.

 

 

 

 

Krav nr:

 

3.2.2.5

 

 

3.2.2.6

Kravtekst

 

Applikationen skal kunne redigere en brugers navn, pinkode og kortnummer.

 

Applikationen skal kunne fjerne en bruger.

Opfyldes af proces:

 

Tilgå Database

Rediger Bruger

Søg

 

Tilgå Database

Slet Bruger

Søg

 

 

 

Krav nr:

 

3.2.2.7

 

 

3.2.2.8

Kravtekst

 

Applikationen skal kunne spærre et kort.

 

Er et kort spærret i applikationen, skal det kunne åbnes igen.

Opfyldes af proces:

 

Tilgå Database

Søg

Service Kom. App.

 

Tilgå Database

Rediger Bruger

Søg

 

 

 

Krav nr:

 

3.2.2.9

 

3.2.2.10

Kravtekst

 

Navnet må højst være på 256 karakterer.

 

Kundenummer må højst være 8 cifre.

Opfyldes af proces:

 

Databasen oprettes manuelt, og feltet Brugernavn sættes til 256 tegn.

Tilgå Database

OpretBruger

Søg

 

Databasen oprettes manuelt, og feltet Brugernavn sættes til 8 cifre.

Tilgå Database

Opret Bruger

Søg

 

 

 

Krav nr:

 

3.2.2.11

 

3.2.2.12

Kravtekst

 

Kortnummeret skal være på 4 cifre.

 

 

Applikationen skal kunne kontrollere i databasen om kortnummer og pinkode passer sammen.

 

Opfyldes af proces:

 

Tilgå Database

OpretBruger

RedigerBruger

Søg

 

Tilgå Database

Servicer Kommunikations Applikation

Som tjek på at alle krav er opfyldt af mindst 1 proces kan følgende skema laves (fra ”Struktureret program udvikling”):

Processer

Tilgå database

Søg

Opret Bruger

Rediger Bruger

Slet Bruger

Terminalstatus

Servicer komm. App.

Krav 3.2.2.X

1

2

3

4

5

6

7

8

9

10

11

12

13

 

 

3

4

5

6

7

8

9

10

11

 

 

 

 

3

4

 

 

 

 

9

10

11

 

 

 

 

 

4

5

 

 

8

 

 

11

 

 

 

 

 

4

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

12

 

 

 

 

4

 

 

7

 

 

 

 

 

13

           

Diagram 14 Oversigt over hvilke krav, der er opfyldt af hvilke processer

Af: Jesper Johansen

3.3                  Procesdesign

3.3.1                  Designmetode

Den anvendte designmetode af de enkelte processer er objektorienteret design. Hvor de enkelte processer søges implementeret via medlemsfunktioner.

 

3.3.2                  Processernes eksterne grænseflader

Processerne kommunikerer eksternt med input fra brugeren og med ODBC’en, som varetager kommunikationen med databasen. Processen Søg kommunikerer ikke med omverdenen, men kun med andre processer. Processernes eksterne grænseflader kan illustreres på følgende figur:

 

Diagram 15 Processernes eksterne grænseflader

 

3.3.3                  Opdeling i moduler

Modulopdelingen sker efter objektorientering. Det vil sige, at de enkelte processer, spredes ud på  forskellige klasser, som hver indeholder et antal funktioner til udførelse af de opgaver klassen har.

 

I det følgende inddeles processerne i klasser.

 

 

Følgende klasser oprettes:

 

DB_Opret_Forb:    Opretter og afbryder forbindelse til ODBC og dermed databasen.

Faelles_Klasse:     Arver public fra DB_Opret_Forb, og indeholder funktioner, som skal bruges af Database administrations applikationen og af Kommunikationeapplikationen.

DB_Database.       Arver public fra Faelles_Klasse og indeholder de funktioner, som bruges af Database administrations applikationen.

DB_Com:                Arver public fra Faelles_Klasse og indeholder de funktioner, som skal bruges af Kommunikationeapplikationen.

DB_Screen             Varetager alle Processer, som Database administrations applikationen består af.

 

Klasseinddelingen foretages med arv, således at diverse funktioner kan genbruges i flere sammenhænge.

 

I det følgende er opridset hvilke klasser, som varetager hvilke processer. Der er gjort efter hierarkisk opdeling, således at de overordnede klasser er nævnt først. Det skal bemærkes, at en proces godt kan varetages af flere klasser.

 

Tilgå Database:

Denne proces løses af klassen: DB_Opret_Forb.

 

Opret Bruger:

Denne proces løses af klasserne:                                     

 

  1. DB_Screen
  2. DB_Database, Faelles_Klasse

                                                                 

Rediger Bruger:

Denne proces løses af klasserne:                                     

 

  1. DB_Screen.
  2. DB_Database, Faelles_Klasse.

 

Slet bruger

Denne proces løses af klasserne:                                     

 

  1. DB_Screen.
  2. DB_Database, Faelles_Klasse.

 

Søg

Denne proces løses af klasserne:                                     

 

  1. DB_Screen, DB_com
  2. DB_Database, Faelles_Klasse.

 

Tilgå database:

Denne proces løses af klassen:

  1. DB_Opret_Forb.

 

Servicer Kommunikation Applikation:

Denne proces løses af klassen:                                                       

  1. DB_com, Faelles_Klasse

 

Terminalstatus.

Denne proces løses af klasserne:                                     

 

  1. DB_Screen, DB_com
  2. DB_Database, Faelles_Klasse.

 

De nævnte klasser indeholdende funktioner og medlemsdata fremgår nedenfor.

 Diagram 16 Klasseoversigt indeholdende funktioner og medlemsdada

Af: Jesper Johansen

3.4                  Moduldesign

3.4.1                  Modulernes eksterne grænseflader:

I det følgende beskrives grænsefladerne mellem de enkelte funktioner / moduler.

På figuren fremgår det af pilens retning hvilken funktion, der har kaldt hvilken funktion.

Diagram 17 Oversigt over de enkelte funktioners grænseflader

3.4.2                  Modulspecifikationer

I der følgende designes de enkelte funktioner. I teksten er alle inputs skrevet med kursiv.

Algoritmerne fastlægges med flowcharts, som følger efter beskrivelsen.

 

Funktionerne i klassen. DB_Opret_Forb.

Funktionsnavn

Opret_Forbindelse

Input

intet

Output

true/false

 

Funktion

Opretter forbindelse til ODBC, så andre funktioner kan tilgå ODBC.

Erklæring

bool DB_Opret_forb::Opret_Forbindelse ();

 

 

 

Funktionsnavn

Luk_Forbindelse

Input

intet

Output

intet

Funktion

Lukker forbindelsen til ODBC.

Erklæring

void DB_Opret_forb::Luk_Forbindelse ()

 

 


Funktionerne i klassen. Faelles_Klasse.

Funktionsnavn

blokerKort

 

 

Input

Int kortNummer

Bool skrivLaes

Output

true / false

Funktion

Funktionen gør to ting:

  1. Hvis skrivLaes er true læses om et kort med det modtagne kortNummer er spærret. Der returneres true hvis det er spærret false hvis ikke.
  2. Hvis skrivLaes er false spærres kortet med det modtagne kortNummer, og der returneres true.

NB:      Hvis der modtages et kortNummer, som ikke findes i databasen, returneres false uanset hvilken værdi skrivLaes har.

Erklæring

bool Faelles_klasse::blokerKort (int kortNummer, bool skrivLaes)

 

 

Funktionsnavn

setAntalForsoeg

Input

int kortNummer

int antal

Output

True/false

Funktion

Funktionen opdaterer antal forkerte indtastnings forsøg af pinkode på det modtagne kortNummer til det modtagne antal i Tabel_kortdata og returnerer true hvis opdateringen er succesfuld. Hvis det modtagne kortNummer ikke findes i Tabel_kortdata opdateres intet, og der returneres false.

Erklæring

bool Faelles_klasse::setAntalForsoeg (int kortNummer, int antal)

 

 

Funktionsnavn

getAntalForsoeg

 

Input

int kortNummer

Output

Integer (heltal)

Funktion

Funktionen skal returnere det antal forkerte forsøg på pinkodeindtastning, der er foretaget på et kort med kortnummeret kortNummer, fra Tabel_kortdata. Hvis det modtagne kortNummer ikke findes i databasen, returneres et ’0’.

 

Erklæring

int Faelles_klasse::getAntalForsoeg (int kortNummer)

 

 

Funktionsnavn

getPinkode

Input

int kortNummer

Output

Integer (heltal)

Funktion

Funktionen skal returnere den pinkode, der er knyttet til kortnummeret i Tabel_kortdata med værdien kortNummer. Hvis det modtagne kortNummer ikke findes i databasen, returneres et nul ’0’.

 

Erklæring

int Faelles_klasse::getPinkode (int kortNummer)

 

 

 

 

 

 

Funktionsnavn

findesKortNummer

Input

int kortNummer

Output

True/false

Funktion

Funktionen skal returnere true hvis det modtagne kortNummer findes i Tabel_kortdata, false hvis ikke.

Erklæring

bool Faelles_klasse::findesKortNummer(int kortNummer)

 

 

Funktionerne i klassen. DB_Com.

Funktionsnavn

DB_Com

Input

intet

Output

intet

Funktion

Funktionen (Constructor),  skal kalde funktionen:
 bool DB_Opret_forb::Opret_Forbindelse(), og udskrive besked på skærmen hvis der IKKE er oprettet forbindelse til databasen.

Erklæring

DB_Com::DB_Com()

 

 

Funktionsnavn

~DB_Com

Input

intet

Output

intet

Funktion

Funktionen (Destructor),  skal kalde funktionen:
 bool DB_Opret_forb::Luk_Forbindelseg ().

Erklæring

DB_Com::~DB_Com()

 

 

Funktionsnavn

validerPinkode

 

Input

int kortNummer

int pinkode

Output

True/false

Funktion

Funktionen skal undersøge om den modtagne pinkode stemmer overens med den pinkode, der findes i Tabel_kortdata knyttet til kortnummeret kortNummer. Der returneres true hvis de to pinkoder stemmer overens, false hvis ikke. Hvis det modtagne kortNummer ikke findes i Tabel_kortdata, returneres false.

Til at finde pinkoden knyttet til kortnummeret kortNummer, kaldes funktionen:
 int Faelles_klasse::getPinkode (int kortNummer).

Erklæring

bool DB_Com::validerPinkode (int kortNummer, int pinkode)

 

 

Funktionsnavn

setTerminalStatus

Input

int fejlkode

Output

True/false

Funktion

Funktionen skal opdatere databasen til en given fejlkode, hvor terminalnummer er 1. Der returneres true hvis opdateringen er succesfuld, false hvis ikke.

Erklæring

bool DB_Com::setTerminalStatus (int fejlkode)

 

 

Funktionerne i klassen. DB_Database.

Funktionsnavn

DB_Database

Input

intet

Output

intet

Funktion

Funktionen (Constructor),  skal kalde funktionen:
 bool DB_Opret_forb::Opret_Forbindelse(), og udskrive besked på skærmen hvis der IKKE er oprettet forbindelse til databasen.

Erklæring

DB_Database::DB_Database()

 

 

Funktionsnavn

~DB_Database

Input

intet

Output

intet

Funktion

Funktionen (Destructor),  skal kalde funktionen:
 bool DB_Opret_forb::Luk_Forbindelseg ().

Erklæring

DB_Database::~DB_Database()

 

 

Funktionsnavn

setNyKortNummer

Input

int kortNummer

Output

True/false

Funktion

Funktionen skal tilføje et nyt kortnummer: værdien kortNummer til tabel_kortdata. Hvis tilføjelsen er succesfuld returneres true, false hvis ikke.

Erklæring

bool DB_Database::setNyKortNummer(int kortNummer)

 

 

 

Funktionsnavn

setNyNavn

Input

const char *brugerNavn

Output

True/false

Funktion

Funktionen skal tilføje et nyt navn: strengen i brugerNavn til tabel_Brugerdata.
Hvis tilføjelsen er succesfuld returneres true, false hvis ikke.

Erklæring

bool DB_Database::setNyNavn (const char *brugerNavn)

 

 

Funktionsnavn

setNyKundeNummer

Input

int kundeNummer

int kortNummer

Output

True/false

Funktion

Funktionen skal opdatere tabel_Brugerdata til et nyt kundenummer med værdien kundeNummer hvor kortnummeret er kortNummer. Der returneres true hvis opdateringen er succesfuld, false hvis ikke. Hvis der modtages et kortNummer, som ikke findes i databasen, opdateres ikke og der returneres false.

Erklæring

bool DB_Database::setNyKundeNummer (int kundeNummer, int kortNummer)

 

 

 

 

 

Funktionsnavn

setNavn

Input

const char *brugerNavn

int brugerNummer

Output

True/false

Funktion

Funktionen skal opdatere tabel_Brugerdata til et nyt brugernavn med værdien brugerNavn, hvor kundenummeret er brugerNummer. Der returneres true hvis opdateringen er succesfuld, false hvis ikke. Hvis der modtages et kortNummer, som ikke findes i databasen, opdateres ikke og der returneres false.

Erklæring

bool DB_Database::setNavn (const char *brugerNavn, int brugerNummer)

 

 

Funktionsnavn

setKortNummer

 

Input

int kortNummer

int kortNrGammel

Output

True/false

Funktion

Funktionen skal opdatere tabel_kortdata til et nyt kortnummer med værdien kortNummer, hvor kortnummeret har værdien kortNrGammel. Der returneres true hvis opdateringen er succesfuld, false hvis ikke. Hvis der modtages et kortNummer, som ikke findes i databasen, opdateres ikke og der returneres false.

Erklæring

bool DB_Database::setKortNummer (int kortNummer, int kortNrGammel)

 

 

 

Funktionsnavn

setPinkode

Input

int pinkode

int kortNummer

Output

True/false

Funktion

Funktionen skal opdatere tabel_kortdata til en nyt pinkode med værdien pinkode, hvor kortnummeret har værdien kortNummer. Der returneres true hvis opdateringen er succesfuld, false hvis ikke. Hvis der modtages et kortNummer, som ikke findes i databasen, opdateres ikke og der returneres false.

Erklæring

bool DB_Database::setPinkode (int pinkode, int kortNummer)

 

 

Funktionsnavn

setKortSpaerret

 

Input

int kortNummer

Output

True/false

Funktion

Funktionen skal opdatere tabel_kortdata sålededes, at kort_spærret værdien sættes til false hvor kortnummeret har værdien kortNummer. Der returneres true hvis opdateringen er succesfuld, false hvis ikke. Hvis der modtages et kortNummer, som ikke findes i databasen, opdateres ikke og der returneres false.

Erklæring

bool DB_Database::setKortSpaerret (int kortNummer)

 

 

Funktionsnavn

sletBruger

Input

int brugerNummer

Output

True/false

Funktion

Funktionen skal slette alle data associeret men kundenummeret brugerNummer i tabel_Brugerdata og tabel_Kortdata. Der returneres true hvis sletningen er succesfuld, false hvis ikke. Hvis der modtages et brugerNummer, som ikke findes i databasen, slettes ikke og der returneres false.

Erklæring

bool DB_Database::sletBruger (int brugerNummer)

 

 

Funktionsnavn

getNavn

Input

int brugerNummer

Output

Tekststreng

Funktion

Funktionen skal returnere den tekststreng, der står i tabel_Brugerdata hvor værdien af kundenummeret er brugerNummer. Hvis det modtagne brugerNummer ikke findes i databasen returneres nul ’0’.

Erklæring

const char * DB_Database::getNavn (int brugerNummer)

 

+

 

 

 

 

Funktionsnavn

getKundeNummer

Input

const char *brugerNavn

Output

Heltal

Funktion

Funktionen skal returnere det kundenummer, der står i tabel_Brugerdata hvor værdien af brugernavnet er brugerNavn. Hvis det modtagne brugerNavn ikke findes i databasen returneres nul ’0’.

Erklæring

int DB_Database::getKundeNummer (const char *brugerNavn)

 

 

 

Funktionsnavn

getTerminalStatus

Input

intet

Output

Heltal

Funktion

Funktionen skal returnere den terminalstatus, der står i tabel_terminaldata hvor værdien af Terminalnummer er 1.

Erklæring

int DB_Database::getTerminalStatus ()

 

 

 

 

 

 

Funktionsnavn

getBrugerAll

Input

char *searchName

Output

True/false

Funktion

Funktionen skal udvælge alle brugernavne og kundenumre fra tabel_Brugerdata hvor starten af brugernavnet matcher det modtagne searchName. Resultatet skal udskrives på skærmen i listeform med headere. Der returneres true.

Erklæring

bool DB_Database::getBrugerAll (char *searchName)

 

 

Funktionsnavn

getKortData

Input

int brugerNummer

Output

True/false

Funktion

Funktionen skal udvælge følgende kortdata:

  • Kortnummer
  • Pinkode
  • Kort_spærret
  • Antal_forsøg

fra tabel_kortdata hvor værdien af kundenummer er det modtagne brugerNummer. Resultatet skal udskrives på skærmen i listeform med headere. Der returneres true.

Erklæring

bool DB_Database::getKortData (int brugerNummer)

 

 

 

 

 

Funktionsnavn

findesBruger

Input

const char *brugerNavn

Output

True/false

Funktion

Funktionen returnerer true hvis det modtagne brugerNavn findes i tabel_Kortdata, false hvis ikke.

Erklæring

bool DB_Database::findesBruger ( const char *brugerNavn)

 

 

Funktionsnavn

opretNyBruger

Se neden for.

Input

const char *brugerNavn

int kortNummer

int pinkode

Output

True/false

Funktion

Funktionen opretter en ny bruger, ved at fylde data i alle pladser i tabel_brugerdata og tabel_kortdata. Hvis der brugerNavn allerede findes i tabel_brugerdata oprettes det ikke på ny.

Funktionen undersøger først om det modtagne brugerNavn findes i tabel_brugerdata ved at kalde: findesBruger hvor brugerNavn medgives.

Findes ikke: Funktionen kalder setNyNavn hvor brugerNavn medgives.

 

Herefter kaldes følgende funktioner:

getKundeNummer hvor brugerNavn medgives.

SetNyKortNummer hvor kortNummer medgives.

SetNyKundeNummer hvor et kundenummer og kortNummer medgives.

SetPinkode hvor kortNummer medgives.

SetKortSpaerret hvor kortNummer medgives.

setAntalForsoeg hvor kortNummer medgives.

Erklæring

bool DB_Database::opretNyBruger (const char *brugerNavn, int kortNummer, int pinkode)

 

 

 

 

 

 


Funktionerne i klassen. DB_Screen.

Funktionsnavn

modtagPinkode

Input

intet

Output

True/false

Funktion

Funktionen udskriver ” Indtast pinkode:” på skærmen og modtager pinkode, som indtastning.

Hvis der er tastet ”-1” returneres false.

Hvis der er tastet forskellig fra 4 cifre udskrives: ” Pinkoden skal være på 4 cifre. Indtast et nyt pinkode”. Der fortsættes med at forlange en pinkode til der er tastet 4 cifre. Herefter returneres true.

Erklæring

bool DB_Screen::modtagPinkode ()

 

 

Funktionsnavn

modtagKortNummer

Input

intet

Output

True/false

Funktion

Funktionen udskriver ” Indtast brugerkortnummer:” på skærmen og modtager kortnummer, som indtastning.

Hvis der er tastet ”-1” returneres false.

Hvis der er tastet forskellig fra 4 cifre udskrives: ” Kortnummeret skal være på 4 cifre. Indtast et nyt kortnummer”. Der fortsættes med at forlange et kortnummer til der er tastet 4 cifre.

Hvis kortnummerstørrelse er korrekt undersøges om kortnummeret allerede findes i tabel_kortdata ved at kalde findesKortNummer. Hvis kortnummeret findes skrives på skærmen: ” Kortnummer  xxxx  er allerede oprettet”. Der forlanges et nyt kortnummer indtil det er korrekt indtastet. Herefter returneres true.

Erklæring

bool DB_Screen::modtagKortNummer()

 

Flowchart modtagKortNummer:

 


 

Funktionsnavn

modtagBrugerNavn

Input

intet

Output

True/false

Funktion

Funktionen udskriver ” Indtast brugernavn:” på skærmen og modtager brugernavn, som indtastning.

Hvis der er tastet ”-1” returneres false.

Hvis der er tastet mere end 256 tegn udskrives: ” Navnet er for langt. Indtast et nyt navn”. Der fortsættes med at forlange et brugernavn til der er tastet mindre end 156 tegn. Herefter returneres true.

Erklæring

bool DB_Screen::modtagBrugerNavn()

 

 

 


 

Funktionsnavn

retAntalForsoeg

Input

intet

Output

True/false

Funktion

Funktionen udskriver ” Antal forkerte forsøg, x rettes til:” på skærmen og modtager forkerte forsøg, som indtastning.

Hvis der er tastet ”-1” returneres false.

Funktionen opdaterer forkerte antal forsøg ved at kalde setAntalForsoeg og medgiver det modtagne forkert forsøg.

Herefter returneres true.

Erklæring

bool DB_Screen::retAntalForsoeg()

 

 

Funktionsnavn

retKortSpaerret

Input

intet

Output

True/false

Funktion

Funktionen undersøger om det kortnummer der er indtastet i retKortnummer er spærret.

Spærret:

Funktionen udskriver ”Spærret kort åbnes”

Hvis der tastes –1 returneres false.

Hvis der tastes ’ja’ åbnes det spærrede kort ved at kalde setKortSpaerret hvor kortnummer medgives.

Hvis der tastes ’nej’ åbnes kortet ikke og der returneres true.

Ikke spærret:

Funktionen udskriver ” åben kort spærres”

Hvis der tastes –1 returneres false.

Hvis der tastes ’ja’ spærres det åbne kort ved at kalde blokerKort hvor kortnummer og false medgives.

Hvis der tastes ’nej’ spærres kortet ikke og der returneres true.

 

Erklæring

bool DB_Screen::retKortSpaerret()

Flow chart:

 

Funktionsnavn

retPinkode

Input

intet

Output

True/false

Funktion

Funktionen undersøger om det kortnummer der er indtastet i retKortnummer er spærret.

Hvis spærret:

Funktionen udskriver ”Spærret kort åbnes”

Hvis der tastes –1 returneres false.

Hvis der tastes ’ja’ åbnes det spærrede kort ved at kalde setKortSpaerret hvor kortnummer medgives.

Hvis der tastes ’nej’ åbnes kortet ikke og der returneres true.

Hvis ikke spærret:

Funktionen udskriver ” åben kort spærres”

Hvis der tastes –1 returneres false.

Hvis der tastes ’ja’ spærres det åbne kort ved at kalde blokerKort hvor kortnummer og false medgives.

Hvis der tastes ’nej’ spærres kortet ikke og der returneres true.

 

Erklæring

bool DB_Screen::retPinkode()

Flowchart:


Funktionsnavn

retKortNummer

Input

intet

Output

True/false

Funktion

Funktionen udskriver: ” Indtast kortnummer”.

Hvis der er indtastet –1 returneres false.

Hvis kortnummeret ikke er på 4 cifre forlanges det indtastet igen.

Hvis kortnummeret er på 4 cifre undersøges om det findes i tabel_kortdata ved at kalde findesKortNummer hvor kortnumemret medgives.

Hvis kortnummeret ikke findes forlanges det indtastet igen.

Er der indtastet et gyldigt kortnummer fortsættes.

 

Funktionen udskriver nu: ”Nuværende kortnummer xxxx rettes til:”

Hvis der er indtastet –1 returneres false.

Hvis der er indtastet ’*’ rettes intet og der returneres true.

Hvis kortnummeret er på 4 cifre undersøges om det findes i tabel_kortdata ved at kalde findesKortNummer hvor kortnumemret medgives.

Hvis kortnummeret findes forlanges det indtastet igen.

Er indtastningen gyldig rettes det nuværende kortnummer til det nyt indtastede ved at kalde funktionen: setKortNummer hvor der medgives det nye og gamle kortnummer og der returneres true.

Erklæring

bool DB_Screen::retKortNummer()

 

 


 

Funktionsnavn

retBrugerNavn

Input

intet

Output

True/false

Funktion

Funktionen udskriver: ” Nuværende brugernavn xxxx rettes til:”. Til at finde det nuværende brugernavn kaldes funktionen: getNavn.

Hvis der indtastes ’*’ rettes intet og der returneres  true.

Hvis der indtastes –1 rettes intet, og der returneres false.

Hvis der er indtastet et korrekt opdateres brugernavn ved at kalde funktionen setNavn hvor der medgives brugernavn og brugernummer.

Erklæring

bool DB_Screen::retBrugerNavn()

 

 

 

Funktionsnavn

ErDerStatus

Input

intet

Output

True/false

Funktion

Funktionen undersøger om der er fejl på terminalen ved at kalde funktionen: getTerminalStatus. Hvis det returnerede tal er forskellig fra 0 er der fejl, og der udskrives: ” Der er fejl paa terminal 1. Fejlkode: XX”

Er der fejl returneres false – ellers true.

Erklæring

bool DB_Screen::ErDerStatus ()

 

 


 

Funktionsnavn

spaerKort

Input

intet

Output

True/false

Funktion

Funktionen står for at spærre et givet kort.

Der udskrives på skærmen: ”Søg på bruger”.

getBrugerAll kaldes hvor det indtastede brugernavn medgives.

-Hvis det tastes –1 returneres false.

 

Der udskrives på skærmen: ”Indtast ønskede brugernummer”.

GetKortData kaldes hvor det indtastede brugernummer medgives.

-Hvis der tastes –1 returneres true.

 

Der udskrives på skærmen: ”Indtast kortnummer”.

FindesKortnummer kaldes hvor det indtastede kortnummer medgives.

-Hvis der tastes –1 returneres false.

-Hvis det indtastede kortnummer ikke findes udskrives:” Kortnummer findes ikke” .

Der forlanges et kortnummer indtil det indtastede findes i databasen.

Findes det indtastede kortnummer spærres dette ved at kalde blokerKort hvor det indtastede kortnummer og false medgives.

Der returneres true.

Erklæring

bool DB_Screen::spaerKort()

 

Flowchart:

 


 

Funktionsnavn

fjernBruger

Input

Intet

Output

True/false

Funktion

Funktionen står for fjernelse af en bruger fra databasen.

Der udskrives på skærmen: ”Søg på bruger”.

getBrugerAll kaldes hvor det indtastede brugernavn medgives.

-Hvis det tastes –1 returneres false.

 

Der udskrives på skærmen: ” Indtast ønskede bruger nummer:”

SletBruger kaldes hvor det indtastede brugernummer medgives.

Hvis sletBruger returnerer true, skrives på skærmen: ”bruger XXXX er slettet.”

Til at finde det aktuelle brugernavn kaldes getNavn hvor det indtastede brugernummer medgives.

Der returneres true.

Erklæring

bool DB_Screen::fjernBruger()

 

 

 

Funktionsnavn

redigerBruger

Input

intet

Output

True/false

Funktion

Funktionen står for redigering af brugerdata.

Der udskrives på skærmen: ”Søg på bruger”.

getBrugerAll kaldes hvor det indtastede brugernavn medgives.

-Hvis det tastes –1 returneres false.

 

Der udskrives på skærmen: ”Indtast ønskede brugernummer”.

GetKortData kaldes hvor det indtastede brugernummer medgives.

-Hvis der tastes –1 returneres true.

 

Funktionen kalder nu:

  1. retBrugerNavn
  2. retKortNummer
  3. retPinkode
  4. retKortSpaerret
  5. retAntalForsoeg

 

-Hvis én af de kaldte funktioner returnerer false, returneres false.

 

Erklæring

bool DB_Screen::redigerBruger()

 

Flowchart:

 

 

Funktionsnavn

nyBruger

Input

intet

Output

True/false

Funktion

Funktionen står for oprettelse af ny bruger.

Funktionen kalder følgende funktioner:

  1. modtagBrugerNavn
  2. modtagKortNummer
  3. modtagPinkode

-Hvis én af de kaldte funktioner returnerer false, returneres false.

 

opretNyBruger kaldes hvor brugernavn, kortnummer og pinkode medgives.

Hvis opretNyBruger returnerer true skrives på skærmen: ” Bruger succesfuldt oprettet”, og der returneres true.

Hvis opretNyBruger returnerer false skrives på skærmen: ” Bruger ikke oprettet pga. fejl” og der returneres false.

Erklæring

bool DB_Screen::nyBruger()

 

Flowchart:

 

Funktionsnavn

hovedMenu

Input

intet

Output

True/false

Funktion

Funktionen udskriver hovedmenuen på skærmen og afventer indtastning af funktionekode.

erDerStatus kaldes for at se om der er fejl på terminalen.

Hvis der tastes ’O’ eller ’o’ kaldes nyBruger og erDerStatus.

Hvis der tastes ’R’ eller ’r’ kaldes redigerBruger og erDerStatus.

Hvis der tastes ’F’ eller ’f’ kaldes fjernBruger og erDerStatus.

Hvis der tastes ’S’ eller ’s’ kaldes spaerKort og erDerStatus.

 

Hvis der tastes andet end de ovennævnte afventer funktionen en ny indtastning.

 

Erklæring

void DB_Screen::hovedMenu()

 

Af: Jesper Johansen